//
//  QNUtils.swift
//  COpenSSL
//
//  Created by 红军张 on 2018/9/3.
//

import Foundation
import Qiniu

class QNUtils {
    
//    static func getaccesskey()-> String {
//        //http://rsf.qbox.me/list?bucket=zhj1214
//        var accesstoken = ""
//        let accessKey = "faXFztmwdVEgWAVRM4Q7KQJYh85yBX3MjliJt6YJ", secretKey = "76tJyg9XLZ1p1z62eAgxyjifh4_kW8Rr_kPleKQo"
//        let signingStr = "/list?\nbucket=zhj1214&limit=20"
//
//        guard let encodedSigned = signingStr.sign(.sha1, key: HMACKey(secretKey))?.encode(.base64) else {return "";}
//        accesstoken = "\(accessKey):\(String(describing: encodedSigned))"
//        print("最后的key___      \(accesstoken)")
//        return accesstoken
//    }
    
    // 七牛验证
//    func QNcheck(){
//        let box = QNUtils.getaccesskey()
//        let headers = [
//            "Authorization": "QBox \(box)",
//            "Content-Type": "application/x-www-form-urlencoded",
//            ]
//        print("+++++++++++++____________\(String(describing: headers["Authorization"]))")
//
//        let bucket = "zhj1214"
//        let url = "http://rsf.qbox.me/list?"
////        let appid = "wxe48ce8eaa4253e0d"
////        let secret = "2163af8b368892d5b6e321ad73d08c1e"
//        var responseJson: [String : Any]?
//
//        do {
//            responseJson = try CURLRequest(url, .failOnError,.postField(.init(name: "bucket", value: bucket))).perform().bodyJSON
//        } catch {
//            return print("七牛接口 抛出异常")
//        }
//        print("请求 成功 \(String(describing: responseJson))")
//    }
    
    
    // MARK: - 获取 token
    func generateToken() -> String {
        let accessKey = "faXFztmwdVEgWAVRM4Q7KQJYh85yBX3MjliJt6YJ", secretKey = "76tJyg9XLZ1p1z62eAgxyjifh4_kW8Rr_kPleKQo" , bucketName = "zhj1214"
        let deadline = Date().timeIntervalSince1970
        print(Int(deadline))
        let json = "{\"scope\":\"\(bucketName)\",\"deadline\":\(Int(deadline) + 36000)}"
        
        // MARK: - 过滤指定字符串   里面的指定字符根据自己的需要添加
        print("将上传策略序列化成为json格式:\(json)")
        let policyData = json.data(using: String.Encoding.utf8)
        let encodedPolicy: String = TokenGetCode().stringByWebSafeEncodingData(data: policyData!, padded: true)
        let encodedPolicysss: String = QN_GTM_Base64.string(byWebSafeEncoding: policyData, padded: true)!
        
        print("对json序列化后的上传策略进行URL安全的Base64编码,得到如下encoded:\(String(describing: encodedPolicy))")

        let hmacData = encodedPolicy.hmacData(.sha1, key: secretKey)
//        guard let encodedSigneddata = encodedPolicy.sign(.sha1, key: HMACKey(secretKey)) else {return "";}
//        let data = Data(bytes: encodedSigneddata)
        
        let encodedSigned: String = TokenGetCode().stringByWebSafeEncodingData(data: hmacData, padded: true)
//        let encodedSigned: String = QNtoken.string(byWebSafeEncoding: data, padded: true)
        print("签名之后 在进行64编码 结果： \(encodedSigned)")
        let token = "\(accessKey):\(encodedSigned):\(encodedPolicy)"
        return token
    }


//
//    /*                                          上传凭证
//    # 假设有如下的管理请求：
//    AccessKey = "MY_ACCESS_KEY"
//    SecretKey = "MY_SECRET_KEY"
//    url = "http://rs.qiniu.com/move/bmV3ZG9jczpmaW5kX21hbi50eHQ=/bmV3ZG9jczpmaW5kLm1hbi50eHQ="
//
//    #则待签名的原始字符串是：
//    signingStr = "/move/bmV3ZG9jczpmaW5kX21hbi50eHQ=/bmV3ZG9jczpmaW5kLm1hbi50eHQ=\n"
//
//    #签名字符串是：
//    sign = "157b18874c0a1d83c4b0802074f0fd39f8e47843"
//    注意：签名结果是二进制数据，此处输出的是每个字节的十六进制表示，以便核对检查。
//
//    #编码后的签名字符串是：
//    encodedSign = "FXsYh0wKHYPEsIAgdPD9OfjkeEM="
//
//    #最终的管理凭证是：
//    accessToken = "MY_ACCESS_KEY:FXsYh0wKHYPEsIAgdPD9OfjkeEM="
//
//     结果
//     第一步:
//     确定上传策略
//     第二步:
//     将上传策略序列化成为json格式:
//     {"scope":"zhj1214","deadline":1480705574}
//     第三步:
//     对json序列化后的上传策略进行URL安全的Base64编码,得到如下encoded:
//     eyJzY29wZSI6InpoajEyMTQiLCJkZWFkbGluZSI6MTQ4MDcwNTU3NH0=
//     第四步:
//     用SecretKey对编码后的上传策略进行HMAC-SHA1加密，并且做URL安全的Base64编码,得到如下的encoded_signed:
//     JSyU+zCDaHZVskCbyOg+cvGUzNU=
//     第五步:
//     将 AccessKey、encode_signed 和 encoded 用 “:” 连接起来,得到如下的UploadToken:
//     faXFztmwdVEgWAVRM4Q7KQJYh85yBX3MjliJt6YJ:JSyU-zCDaHZVskCbyOg-cvGUzNU=:eyJzY29wZSI6InpoajEyMTQiLCJkZWFkbGluZSI6MTQ4MDcwNTU3NH0=
//     */


//  /*
//     *                                                  下载凭证
//     1.构造下载 URL：
//     DownloadUrl = 'http://78re52.com1.z0.glb.clouddn.com/resource/flower.jpg'
//     2.为下载 URL 加上过期时间 e 参数，Unix时间戳：
//     DownloadUrl = 'http://78re52.com1.z0.glb.clouddn.com/resource/flower.jpg?e=1451491200'
//     3.对上一步得到的 URL 字符串计算HMAC-SHA1签名（假设访问密钥（AK/SK）是 MY_SECRET_KEY），并对结果做URL 安全的 Base64 编码：
//     Sign = hmac_sha1(DownloadUrl, 'MY_SECRET_KEY')
//     EncodedSign = urlsafe_base64_encode(Sign)
//     4.将访问密钥（AK/SK）（假设是 MY_ACCESS_KEY）与上一步计算得到的结果用英文符号 : 连接起来：
//     Token = 'MY_ACCESS_KEY:yN9WtB0lQheegAwva64yBuH3ZgU='
//     5.将上述 Token 拼接到含过期时间参数 e 的 DownloadUrl 之后，作为最后的下载 URL：
//     RealDownloadUrl = 'http://78re52.com1.z0.glb.clouddn.com/resource/flower.jpg?e=1451491200&token=MY_ACCESS_KEY:yN9WtB0lQheegAwva64yBuH3ZgU='
//    */
    static func generateDownloadToken(url :String) -> String{
        let accessKey = "faXFztmwdVEgWAVRM4Q7KQJYh85yBX3MjliJt6YJ", secretKey = "76tJyg9XLZ1p1z62eAgxyjifh4_kW8Rr_kPleKQo"
        if !url.isEmpty {
            var urlStr = url + "?e=\(Int(Date().timeIntervalSince1970)+3600)"
            let sign = urlStr.hmacData(.sha1, key: secretKey)
            let Encodedsign: String = TokenGetCode().stringByWebSafeEncodingData(data: sign, padded: true)
//            let Encodedsign = QN_GTM_Base64.string(byEncoding: sign)
            let token = accessKey + ":" + Encodedsign
            urlStr = urlStr + "&token=" + token
            return urlStr
        }
        return ""
    }
//    /*
//                                                        管理凭证
//     # 假设有如下的管理请求：
//     AccessKey = "MY_ACCESS_KEY"
//     SecretKey = "MY_SECRET_KEY"
//     url = "http://rs.qiniu.com/move/bmV3ZG9jczpmaW5kX21hbi50eHQ=/bmV3ZG9jczpmaW5kLm1hbi50eHQ="
//     #则待签名的原始字符串是：
//     signingStr = "/move/bmV3ZG9jczpmaW5kX21hbi50eHQ=/bmV3ZG9jczpmaW5kLm1hbi50eHQ=\n"
//     #签名字符串是：
//     sign = "157b18874c0a1d83c4b0802074f0fd39f8e47843"
//     注意：签名结果是二进制数据，此处输出的是每个字节的十六进制表示，以便核对检查。
//     #编码后的签名字符串是：
//     encodedSign = "FXsYh0wKHYPEsIAgdPD9OfjkeEM="
//     #最终的管理凭证是：
//     accessToken = "MY_ACCESS_KEY:FXsYh0wKHYPEsIAgdPD9OfjkeEM="
//     */
//    static func generateManagementCredentialsToken(url:String)->String{
//        let accessKey = "faXFztmwdVEgWAVRM4Q7KQJYh85yBX3MjliJt6YJ", secretKey = "76tJyg9XLZ1p1z62eAgxyjifh4_kW8Rr_kPleKQo" , bucketName = "zhj1214"
//        if !url.isEmpty{
//            let urlStr = url + "\n" + "bucket=\(bucketName.urlEncoded)"
//            let sing = urlStr.hmacData(.sha1, key: secretKey)
//            let encodedSign = QN_GTM_Base64.string(byEncoding: sing)
//            let token = accessKey + ":" + encodedSign!
//            return token
//        }
//        return ""
//    }
//}



}
